<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 
        面向过程: 按照步骤一步一步的完成功能,注重过程(步骤)
        面向对象: 将功能拆分分装进对象内,注重对象(封装在对象内)
     -->
    <script>
        // 构造函数 创建对象
        function Aa(name){
            // 函数内给对象添加内容
            // console.log("====");
            // 构造函数中的this指向当前实例对象
            // console.log(this);
            this.name = name;
            // this.run = function(){
            //     console.log(this);
            // }

        }
        // 原型对象prototype
        Aa.prototype.test = function(){
            console.log("test被执行了");
        }
        // new 创建空对象  通过new创建的对象叫实例对象
        var obj = new Aa("lili");
        // console.log(obj);
        // obj.run()
        // obj.test();

        var obj1 = new Aa("nana");
        console.log(obj1.__proto__); //Aa这个构造函数的原型对象
        console.log(obj1.__proto__.__proto__); //构造函数的原型对象的原型对象
        console.log(obj1.__proto__.__proto__.__proto__); //null
        // obj1.run();
        // obj1.test()

        // obj.name = "lili";

        // ******************************************

        // 
        var str = "aaa";  //字面量的方法创建
        var str1 = new String("bbb");  //new创建
        console.log(str);
        // 每个对象都有原型对象
        // __proto__ 读取当前对象的原型对象
        // 原型对象也有原型对象
        console.log(str.__proto__); //String这个构造函数的原型对象(字符串的原型对象)
        console.log(str.__proto__.__proto__); //构造函数的原型对象的原型对象
        console.log(str.__proto__.__proto__.__proto__); //null
        console.log(str1);
        console.log(str1.__proto__);

        
        // console.log(str.indexOf("a"));
        // console.log(str1.indexOf("a"));

        // 作用域链: 当使用一个变量或函数时,会在当前作用域开始向外层作用域一层一层的查找;
        // 直到找到(直接使用停止查找)或者到最外层全局也没找到报错为止
        // var num = 10;
        // function a(){

        //     function b(){

        //         function c(){
        //             console.log(num);
        //         }
        //     }
        // }


    </script>
</body>
</html>